Lernziele
Wiederholungsfragen
Ein Klick auf den roten Hyperlink zeigt die richtige Lösung.
Ist Collection ein spezifischer oder ein allgemeiner Objekttyp Begründen Sie Ihre Antwort.
Welche der folgenden Gruppen sind geordnet, welche ungeordnet? Begründen Sie Ihre Antwort.
Was ist richtig? Eigenschaften lassen sich durch ...
Was geben Sie als Objekttyp an, wenn Sie eine Objektvariable für ein benutzerdefiniertes Objekt deklarieren möchten?
Was tun Sie, wenn Sie in VBA eine neue Objektklassen erstellen möchten?
Vertiefungsfragen
Das Telefonverzeichnis-Projekt soll vollständig in VBA unter Excel implementiert werden. (Die Arbeitsmappe LTelefonverzeichnis.xls enthält die lauffähige Anwendung. Machen Sie sich mit der Benutzerschnittstelle und den Funktionen der Anwendung vertraut, bevor Sie mit der Aufgabe beginnen)
Vorbereitungen
Die Arbeitsmappe TelefonverzeichnisSkelett.xls enthält eine fertige Benutzerschnittstelle und ein Programmskelett. Das nächste Bild zeigt das Objektmodell der Anwendung.
Implementieren Sie das Verzeichnis:
Vereinbaren Sie im Vereinbarungsabschnitt des Moduls Prozeduren eine Objektvariable Verzeichnis für das Telefonverzeichnis.
| Fragen: | Welchen Gültigkeitsbereich und welchen Datentyp geben Sie bei der Vereinbarung der Variablen an? Begründen Sie Ihre Antwort. |
Implementieren Sie eine Prozedur initialisiere(), die das Verzeichnis-Objekt erstellt und der Variablen zuweist, falls das Objekt noch nicht existiert.
| Fragen: | Wie überprüfen Sie, ob ein Objekt existiert? Weshalb ist eine solche Überprüfung notwendig oder zumindest sinnvoll? |
Implementieren Sie die benutzerdefinierte Objektklasse cEintrag für die Einträge.
Erstellen Sie ein Klassenmodul, und benennen Sie es mit cEintrag.
| Fragen: | Weshalb sollte man ein Klassenmodul sofort sinnvoll benennen, nachdem man es erstellt hat? Ist es wirklich nötig, dem Namen ein c voran zu stellen? |
Implementieren Sie die beiden Eigenschaften Name und Telefon.
| Fragen: | Welchen Gültigkeitsbereich und welchen Datentyp geben Sie bei der Vereinbarung der Variablen an? Begründen Sie Ihre Antwort. |
Implementieren Sie die Ereignisprozedur hinzufügen_Klick().
Schliesslich gibt sie die neue Anzahl Einträge auf dem Tabellenblatt aus.
| Hinweise: | Sie benötigen eine lokale Variable. Vereinbaren Sie diese und implementieren Sie dann die fünf Punkte der Reihe nach (Sequenz von Anweisungen) |
Implementieren Sie die Ereignisprozedur suchen_Klick().
gibt die Telefonnummer aus, falls der Name des aktuellen Eintrags mit dem Namen auf dem Tabellenblatt übereinstimmt.
| Hinweise: | Im Gegensatz zu Aufgabe c) lässt sich diese Aufgabe nicht mehr einfach als Sequenz von Anweisungen implementieren. Sie benötigen eine Wiederholung. |
| Fragen: | Begründen Sie Ihre Wahl des Schleifentyps. Was passiert, wenn Sie einen Namen angeben, der nicht in der Liste existiert? Was passiert, wenn ein Name mehrmals in der Liste vorkommt? Schlagen Sie sinnvolle Reaktionen auf diese Ausnahmefälle vor, und überlegen Sie sich, wie man Sie implementieren könnte. |
Implementieren Sie die Ereignisprozedur auflisten_Klick(). Sie soll vorläufig das noch unsortierte Verzeichnis ausgeben.
Sie benötigen eine Zählvariable, um jedes Datenpaar auf einer neuen Zeile des Tabellenblatts ausgeben zu können.
| Hinweise: | Benutzen Sie zum Löschen des Ausgabebereichs die ClearContents-Methode der Range-Objekte. |
Implementieren Sie in der Prozedur sortiere() einen Sortieralgorithmus, der die Einträge im Verzeichnis alphabetisch in aufsteigender Reihenfolge sortiert.
Binden Sie die Prozedur sortiere() in die Ereignisprozedur auflisten_Klick() ein.
Sortiere durch Auswählen
Erstelle neues Verzeichnis (ohne Einträge)
Solange noch Einträge im alten Verzeichnis
Suche kleinsten Eintrag im alten Verzeichnis
Füge Eintrag am Ende des neuen Verzeichnis ein
Entferne Eintrag aus altem Verzeichnis
Ersetze altes Verzeichnis durch neues Verzeichnis
Suche kleinsten Eintrag im Verzeichnis
Setze kleinster Eintrag = erster Eintrag
Für alle Einträge im Verzeichnis
Falls aktueller Eintrag < kleinster Eintrag
Setze kleinster Eintrag = aktueller Eintrag
| Fragen: | Anstatt die Liste erst vor der Ausgabe zu sortieren, könnte man die Einträge bereits bei der Eingabe in der richtigen Reihenfolge einfüllen. Welche Änderungen müssten Sie am Programm vornehmen? Versuchen Sie diese Variante zu implementieren. |